<?php

/**
 * Description of Entity
 *
 * @author markos
 */
class VirtualLabs_Admin_Dao {

    /**
     * 
     * @param type $tableName
     * @param type $code
     * @return boolean
     * @throws Exception
     */
    public function delete($tableName, $code = null) {
        try {
            $db = Zend_Db_Table::getDefaultAdapter();
            $db->beginTransaction();
            if (is_null($code)) {
                $db->delete($tableName);
            } else {
                $db->delete($tableName, array("{$code['key']} = ?" => $code['value']));
            }
            $db->commit();
            return true;
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->err($e->getMessage());
            $logger->err($e->getTraceAsString());
            throw $e;
        }
    }

    /**
     * Persiste en base de datos los datos de la entidad. 
     * 
     * @param type $tableName nombre de tabla en la base de datos en la que 
     * insertar los datos
     * @param type $data arreglo clave|valor de los datos a insertar, las 
     * claves deben ser los nombres de columnas
     * @param type $code es el PK o columna que se evaluara por medio de = con el valor enviado
     * @return array un array con todos los valores modificados 
     * @throws Exception en caso que ocurrra alguna excepcion durante la opeacion, la misma se hara flotar
     */
    public function save($tableName, $data, $code = null) {
        $logger = Zend_Registry::get(VirtualLabs_Common::DEBUG_LOG);
        try {

            $logger->info("[ code ] " . print_r($code, true));
            $logger->info("[ data ] " . print_r($data, true));
            $db = Zend_Db_Table::getDefaultAdapter();
            if (!is_null($code['value'])) {
                $db->update($tableName, $data, array("{$code['key']} = ?" => $code['value']));
                $data[$code['key']] = $code['value'];
            } else {
                $db->insert($tableName, $data);
                $data[$code['key']] = $db->lastInsertId($tableName);
            }
            return $data;
        } catch (Exception $e) {
            $logger = Zend_Registry::get(VirtualLabs_Exception::ERROR_LOG);
            $logger->err($e->getMessage());
            $logger->err($e->getTraceAsString());
            throw $e;
        }
    }

}

?>
